package com.muyu.file.service.impl;

import com.muyu.file.service.MinioService;
import com.muyu.file.util.MinioConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

@Service
public class MinioServiceImpl implements MinioService {

    @Autowired
    private MinioConfig minioConfig;

    @Override
    public String add(String directoryPath) {
        List<String> imageFileNames = new ArrayList<>();

        // 获取目录对象
        File directory = new File(directoryPath);

        // 检查目录是否存在且是一个目录
        if (directory.exists() && directory.isDirectory()) {
            // 获取目录下的所有文件和子目录
            File[] files = directory.listFiles();
            if (files != null) {
                // 遍历文件和子目录
                for (File file : files) {
                    // 检查文件是否是图片（基于文件扩展名，这里应该添加逻辑）
                    if (isImageFile(file)) {
                        try {
                            MultipartFile multipartFile = createMultipartFileFromFile(file);
                            String uploadedFilePath = this.minioConfig.upload(multipartFile); // 假设这个方法现在返回上传后的文件路径或URL
                            imageFileNames.add(uploadedFilePath);
                        } catch (Exception e) {
                            // 处理上传过程中的异常
                            e.printStackTrace();
                        }
                    }
                }
            }
        } else {
            // 如果目录不存在或不是一个目录，返回空字符串或抛出异常
            return "";
        }

        // 将文件名列表转换为逗号分隔的字符串
        return String.join(",", imageFileNames);
    }

//    private boolean isImageFile(File file) {
//        // 添加检查文件是否为图片的逻辑，例如基于文件扩展名
//        String fileName = file.getName().toLowerCase();
//        return fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".png") || fileName.endsWith(".gif");
//    }

    private MultipartFile createMultipartFileFromFile(File file) throws IOException {
        byte[] bytes = Files.readAllBytes(file.toPath());
        String contentType = Files.probeContentType(file.toPath());  // 获取文件的 MIME 类型

        // 使用正确的构造函数，这里将 contentType 转换为 String 类型
        MultipartFile multipartFile = new MockMultipartFile(
                "file",                           // 参数名
                file.getName(),                   // 原始文件名
                contentType,                      // MIME 类型 (String)
                new ByteArrayInputStream(bytes)   // 文件内容 (InputStream)
        );
        return multipartFile;
    }

    // 辅助方法：检查文件是否是图片
    private static boolean isImageFile(File file) {
        String lowerCaseName = file.getName().toLowerCase();
        return lowerCaseName.endsWith(".jpg") || lowerCaseName.endsWith(".jpeg") ||
                lowerCaseName.endsWith(".png") || lowerCaseName.endsWith(".gif") ||
                lowerCaseName.endsWith(".bmp") || lowerCaseName.endsWith(".webp")||
                lowerCaseName.endsWith(".jfif");

    }
}
